package entities;

import java.util.*;

import java.sql.Date;

import dominio.Sistema;

public class Sistema2 {
	
	private static List <Cliente> clientes;
	private static List <Maquina> maquinas;
	private static List <Profesor> profesores;
	private static List <Rutina> rutinas;
	private static List <Ejercicio> ejercicios;
	private static List <CuotaPaga> cuotasPagas;
	private static List <Clase> clases;
	private static List <Locker> lockers;
	private static List <OpcionDias> opcionesDias;
	private static List <OpcionHoraria> opcionesHorarios;
	private static List <DatosFisicos> datosFisicosClientes;
	
	public Sistema2() {
		super();
	}

	

	public static List<Cliente> getClientes() {
		return clientes;
	}
	public static void setClientes(List<Cliente> clientes) {
		Sistema2.clientes = clientes;
	}
	public static List<Maquina> getMaquinas() {
		return maquinas;
	}
	public static void setMaquinas(List<Maquina> maquinas) {
		Sistema2.maquinas = maquinas;
	}
	public static List<Profesor> getProfesores() {
		return profesores;
	}
	public static void setProfesores(List<Profesor> profesores) {
		Sistema2.profesores = profesores;
	}
	public static List<Rutina> getRutinas() {
		return rutinas;
	}
	public static void setRutinas(List<Rutina> rutinas) {
		Sistema2.rutinas = rutinas;
	}
	public static List<Ejercicio> getEjercicios() {
		return ejercicios;
	}
	public static void setEjercicios(List<Ejercicio> ejercicios) {
		Sistema2.ejercicios = ejercicios;
	}
	public static List<CuotaPaga> getCuotasPagas() {
		return cuotasPagas;
	}
	public static void setCuotasPagas(List<CuotaPaga> cuotasPagas) {
		Sistema2.cuotasPagas = cuotasPagas;
	}
	public static List<Clase> getClases() {
		return clases;
	}
	public static void setClases(List<Clase> clases) {
		Sistema2.clases = clases;
	}
	public static List<Locker> getLockers() {
		return lockers;
	}
	public static void setLockers(List<Locker> lockers) {
		Sistema2.lockers = lockers;
	}
	public static List<OpcionDias> getOpcionesDias() {
		return opcionesDias;
	}
	public static void setOpcionesDias(List<OpcionDias> opcionesDias) {
		Sistema2.opcionesDias = opcionesDias;
	}
	public static List<OpcionHoraria> getOpcionesHorarios() {
		return opcionesHorarios;
	}
	public static void setOpcionesHorarios(List<OpcionHoraria> opcionesHorarios) {
		Sistema2.opcionesHorarios = opcionesHorarios;
	}
	public static List<DatosFisicos> getDatosFisicosClientes() {
		return datosFisicosClientes;
	}
	public static void setDatosFisicosClientes(
			List<DatosFisicos> datosFisicosClientes) {
		Sistema2.datosFisicosClientes = datosFisicosClientes;
	}

	public static Cliente buscarClienteDoc (int nroDoc){
		Cliente cliente = new Cliente();
		for (Cliente c : clientes){
			if (c.getNroDoc() == nroDoc){
				cliente = c;
			}
		}
		return cliente;
	}
	
	public static DatosFisicos buscarDFdeClientePorDoc (int nroDoc){
		DatosFisicos df1 = new DatosFisicos();
		for (DatosFisicos df2 : datosFisicosClientes){
			if (df2.getCliente().getNroDoc() == nroDoc){
				df1 = df2;
			}
		}
		return df1;
	}
	
	public static void actualizarDFdeCliente (DatosFisicos df){
		for (DatosFisicos df2 : datosFisicosClientes){
			if (df2.getCliente().getNroDoc() == df.getCliente().getNroDoc()){
				df2 = df;
			}
		}
	}
	
	public static void actualizarPagos (CuotaPaga cp){
		if (cuotasPagas == null){
			cuotasPagas = new ArrayList();
			cuotasPagas.add(cp);
		} else {
			boolean match = false;
			for (CuotaPaga cc : cuotasPagas){
				if (cc.getCliente().getNroDoc() == cp.getCliente().getNroDoc() && cc.getFechaVencimiento() == cp.getFechaVencimiento()){
					match = true;
				}
			}
			if (match != true){
				cuotasPagas.add(cp);
			}
		}
	}
	
	public static boolean verificarPago (CuotaPaga cp){
		boolean existePago = false;
		if (cuotasPagas == null){
			return existePago;
		} else {
			for (CuotaPaga cc : cuotasPagas){
				if (cc.getCliente().getNroDoc() == cp.getCliente().getNroDoc() && cc.getFechaVencimiento().compareTo(cp.getFechaVencimiento()) == 0){
					existePago = true;
				}
			}
		}
		return existePago;
	}
	
	public static Profesor buscarProfesorPorDoc (int nroDoc){
		Profesor p = new Profesor();
		for (Profesor p2 : profesores){
			if (p2.getNroDocProf() == nroDoc){
				p = p2;
			}
		}
		return p;
	}
	
	public static void actualizarProfesores (Profesor p){
		if (profesores == null){
			profesores = new ArrayList();
			profesores.add(p);
		} else {
			boolean match = false;
			for (Profesor pp : profesores){
				if (pp.getNombre().matches(p.getNombre())){
					match = true;
					pp = p;
				}
			}
			if (match != true){
				profesores.add(p);
			}
		}
	}
	
	public static Ejercicio buscarEjercicioPorNombre (String nombre){
		Ejercicio e = new Ejercicio();
		for (Ejercicio e2 : ejercicios){
			if (e2.getNombre() == nombre){
				e = e2;
			}
		}
		return e;
	}
	
	
	public static Rutina generarRutina2 (int nroDoc){
		return Sistema.getInstancia().buscarRutinaPorID(6);
	}
	
	public static Rutina generarRutina (int nroDoc){
		Rutina rutina = new Rutina();
		/*
		DatosFisicos dfActual = new DatosFisicos();
		dfActual.setIdDatosFisico(0);
		
		for (DatosFisicos df : datosFisicosClientes){
			if (df.getCliente().getNroDoc() == nroDoc){
				if (df.getIdDatosFisico() > dfActual.getIdDatosFisico()){
					dfActual = df;
				} 
			}
		}
		
		*/
		
		List <ItemRutina> itemsRutina = new ArrayList <ItemRutina>();
		
		ItemRutina ir1 = new ItemRutina();
		ItemRutina ir2 = new ItemRutina();
		ItemRutina ir3 = new ItemRutina();
		ItemRutina ir4 = new ItemRutina();
		
		java.util.Calendar cal = Calendar.getInstance();
		java.util.Date utilDate = new java.util.Date(); // your util date
		cal.setTime(utilDate);
		cal.set(Calendar.HOUR_OF_DAY, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		cal.set(Calendar.MILLISECOND, 0);    
		java.sql.Date sqlDate = new java.sql.Date(cal.getTime().getTime()); // your sql date

		
		Maquina m1 = new Maquina();
		m1.setIdMaquina(1);
		m1.setNombre("maquina1");
		m1.setFechaComprada(sqlDate);
		m1.setUltimaFechaRevisada(sqlDate);
		
		Ejercicio ej1 = new Ejercicio();
		ej1.setIdEjercicio(1);
		ej1.setMaquina(m1);
		ej1.setMusculo("gluteo");
		ej1.setNombre("estocadas");
		ej1.setObjetivo("perder peso");
		
		Ejercicio ej2 = new Ejercicio();
		ej2.setIdEjercicio(2);
		ej2.setMaquina(m1);
		ej2.setMusculo("tricep");
		ej2.setNombre("dipping");
		ej2.setObjetivo("tonificar");
		
		Ejercicio ej3 = new Ejercicio();
		ej3.setIdEjercicio(3);
		ej3.setMaquina(m1);
		ej3.setMusculo("pectoral");
		ej3.setNombre("press");
		ej3.setObjetivo("tonificar");
		
		ejercicios.add(ej1);
		ejercicios.add(ej2);
		ejercicios.add(ej3);
		
		ir1.setEjercicio(ej1);
		ir1.setDia("lunes");
		ir1.setCantidad(4);
		ir1.setRepeticiones(3);
		
		ir4.setEjercicio(ej2);
		ir4.setDia("lunes");
		ir4.setCantidad(3);
		ir4.setRepeticiones(5);
		
		ir2.setEjercicio(ej2);
		ir2.setDia("martes");
		ir2.setCantidad(10);
		ir2.setRepeticiones(2);
		
		ir3.setEjercicio(ej3);
		ir3.setDia("viernes");
		ir3.setCantidad(10);
		ir3.setRepeticiones(5);
		
		itemsRutina.add(ir1);
		itemsRutina.add(ir2);
		itemsRutina.add(ir3);
		itemsRutina.add(ir4);
		
		rutina.setIdRutina(1);
		rutina.setCliente(Sistema2.buscarClienteDoc(nroDoc));
		rutina.setItemsRutina(itemsRutina);
		
		System.out.println("Aca llega");
		System.out.println(rutina.getItemsRutina().size());
		
		return rutina;
	}
}
